"""
进阶版装饰器：可传参的装饰器
"""
from django.core.cache import caches


def cache_check(**cache_kwargs):
    def _cache_check(func):
        def wrapper(self, request, *args, **kwargs):
            """
            cache_kwargs:装饰器参数
            func:被装饰的方法-get()
            self,request,*args,**kwargs:被装饰的方法的参数
            """
            # 函数增强逻辑
            # 1.设置缓存区域
            if "cache" in cache_kwargs:
                CACHES = caches[cache_kwargs["cache"]]
            else:
                CACHES = caches["default"]
            # 2.组装redis的key
            key = cache_kwargs["key_prefix"] + str(kwargs["sku_id"])
            #3.确认缓存中是否存在
            redis_resp = CACHES.get(key)
            if redis_resp:
                #缓存中存在响应
                print("详情页数据来自redis")
                return redis_resp
            #缓存中不存在
            mysql_resp = func(self, request, *args, **kwargs)
            expire = cache_kwargs.get("expire",60)
            CACHES.set(key,mysql_resp,expire)

            return mysql_resp

        return wrapper

    return _cache_check
